﻿using System;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

using MakeIT.MiraPark.Negocios;

namespace MiraPark
{
    public partial class FormVerificacaoDiaria : Form
    {
        public FormVerificacaoDiaria()
        {
            InitializeComponent();
        }
        private void FormFormVerificacaoDiaria_Load(object sender, EventArgs e)
        {
            this.textBoxFechamento.Text = ModelBO.getParametro(ParametroVO.parametros.FechamentoDiario);
            this.monthCalendarAbertura.TodayDate = DateTime.Today;
            this.monthCalendarAbertura.MinDate = DateTime.Parse(this.textBoxFechamento.Text).AddDays(1);
        }

        private void buttonExecutar_Click(object sender, EventArgs e)
        {
            DateTime dtIni = DateTime.Parse(this.textBoxFechamento.Text);
            DateTime dtFim = this.monthCalendarAbertura.SelectionStart.Date;
            
            StringBuilder temp = new StringBuilder();

            temp.AppendLine("Executando verificações...");
            temp.AppendLine("--------------------------------------------------------------");

            List<MovimentacaoVO> listMovimentacaoVOs = ModelBO.getMovimentacoes(null, null, null, dtIni, dtFim.AddDays(-1), null, null, true, false, null, false, true, false, false,true);
            if (listMovimentacaoVOs != null && listMovimentacaoVOs.Count > 0)
            {
                temp.AppendLine("\tExistem Movimentações em aberto entre "+dtIni.ToShortDateString()+ " e " + dtFim.AddDays(-1).ToShortDateString());
                temp.AppendLine("");
            }

            decimal total = 0.0M;
            List<RecebimentoVO> listRecebimentoVOs = ModelBO.getRecebimentos(null, null, null, null, true, false, new DateTime(1, 1, 1), dtFim, null, null);
            if (listRecebimentoVOs != null && listRecebimentoVOs.Count > 0)
            {
                temp.AppendLine("\tRecebimentos em aberto até " + dtFim.ToShortDateString());
                temp.AppendLine("\t--------------------------------------------------------------");
                foreach (RecebimentoVO recebimentoVO in listRecebimentoVOs)
                {
                    total += recebimentoVO.valor;
                    temp.AppendLine("\t\tVencimento: " + recebimentoVO.dtVencimento.ToShortDateString() + 
                        " Valor: " + recebimentoVO.valor.ToString("#,##0.00") + 
                        (recebimentoVO.idMensalista > 0 ? " Mensalista: "+ModelBO.getMensalista(recebimentoVO.idMensalista).clienteVO.nome : "") + 
                        (recebimentoVO.idConvenio > 0 ? " Convênio: "+ModelBO.getConvenio(recebimentoVO.idConvenio).clienteVO.nome : "") + " " + 
                        recebimentoVO.recebimento);
                }
                temp.AppendLine("\tTotal Recebimentos em Aberto: "+total.ToString());
                temp.AppendLine("");
            }

            total = 0.0M;
            List<PagamentoVO> listPagamentoVOs = ModelBO.getPagamentos(null, true, false, new DateTime(1,1,1), dtFim ,null, null);
            if (listPagamentoVOs != null && listPagamentoVOs.Count > 0)
            {
                temp.AppendLine("\tPagamentos em aberto até "+dtFim.ToShortDateString());
                temp.AppendLine("\t--------------------------------------------------------------");
                foreach (PagamentoVO pagamentoVO in listPagamentoVOs)
                {
                    total += pagamentoVO.valor;
                    temp.AppendLine("\t\tVencimento: " + pagamentoVO.dtVencimento.ToShortDateString() + 
                        " Valor: " + pagamentoVO.valor.ToString("#,##0.00") + " " + 
                        pagamentoVO.pagamento);
                }
                temp.AppendLine("\tTotal Pagamentos em Aberto: " + total.ToString());
                temp.AppendLine("");
            }

            total = 0.0M;
            listRecebimentoVOs = ModelBO.getRecebimentos(null, null, null, null, false, true, null, null, dtIni.AddDays(1), dtFim);
            if (listRecebimentoVOs != null && listRecebimentoVOs.Count > 0)
            {
                temp.AppendLine("Recebimentos entre " + dtIni.AddDays(1).ToShortDateString() + " e " + dtFim.ToShortDateString());
                temp.AppendLine("--------------------------------------------------------------");
                foreach (RecebimentoVO recebimentoVO in listRecebimentoVOs)
                {
                    total += recebimentoVO.valorRec;
                    temp.AppendLine("\tVencimento: " + recebimentoVO.dtVencimento.ToShortDateString() +
                        "Pagamento: " + recebimentoVO.dtPagamento.Value.ToShortDateString() +
                        " Valor: " + recebimentoVO.valor.ToString("#,##0.00") +
                        " Valor Recebido: " + recebimentoVO.valorRec.ToString("#,##0.00") +
                        (recebimentoVO.idMensalista > 0 ? " Mensalista" : "") + 
                        (recebimentoVO.idConvenio > 0 ? " Convênio" : "") + " " + 
                        recebimentoVO.recebimento);
                }
                temp.AppendLine("\tTotal Recebimentos: " + total.ToString());
                temp.AppendLine("");
            }

            total = 0.0M;
            listPagamentoVOs = ModelBO.getPagamentos(null, false, true, null, null, dtIni.AddDays(1), dtFim);
            if (listPagamentoVOs != null && listPagamentoVOs.Count > 0)
            {
                temp.AppendLine("Pagamentos entre " + dtIni.AddDays(1).ToShortDateString() + " e " + dtFim.ToShortDateString());
                temp.AppendLine("--------------------------------------------------------------");
                foreach (PagamentoVO pagamentoVO in listPagamentoVOs)
                {
                    total += pagamentoVO.valorPago;
                    temp.AppendLine("\tVencimento: " + pagamentoVO.dtVencimento.ToShortDateString() +
                        "Pagamento: " + pagamentoVO.dtPagamento.Value.ToShortDateString() +
                        "Valor: " + pagamentoVO.valorPago.ToString("#,##0.00") + 
                        "Valor Pago: " + pagamentoVO.valorPago.ToString("#,##0.00") + " " + 
                        pagamentoVO.pagamento);
                }
                temp.AppendLine("\tTotal Pagamentos: " + total.ToString());
                temp.AppendLine("");
            }

            listMovimentacaoVOs = ModelBO.getMovimentacoes(null, null, null, new DateTime(1,1,1), dtFim, null, null, true, false, null, false, false,false,false,true);
            if (listMovimentacaoVOs != null && listMovimentacaoVOs.Count > 0)
            {
                temp.AppendLine("Veiculos com entrada no pátio e sem saida até " + dtFim.ToShortDateString());
                temp.AppendLine("--------------------------------------------------------------");
                foreach (MovimentacaoVO movimentacaoVO in listMovimentacaoVOs)
                {
                    temp.AppendLine("\tEntrada: "+movimentacaoVO.entrada.ToString() +
                        " Placa: "+ movimentacaoVO.placa + 
                        " Ticket: "+movimentacaoVO.ticket +
                        (movimentacaoVO.idMensalista > 0 ? " Mensalista" : ""));
                }
                temp.AppendLine("");
            }

            List<MensalistaVO> listMensalistaVOs = ModelBO.getMensalistas(true);
            if (listMensalistaVOs != null && listMensalistaVOs.Count > 0)
            {
                temp.AppendLine("Mensalistas com vencimentos entre " + dtIni.ToShortDateString() + " e " + dtFim.ToShortDateString());
                temp.AppendLine("--------------------------------------------------------------");
                foreach (MensalistaVO mensalistaVO in listMensalistaVOs)
                {
                    if (checkDia(mensalistaVO.diaPgto, dtIni, dtFim))
                    {
                        temp.AppendLine("\tMensalista: "+mensalistaVO.clienteVO.nome+
                            " ID: "+mensalistaVO.idMensalista.ToString()+
                            " Dia para pagamento: "+mensalistaVO.diaPgto.ToString());
                    }
                }
                temp.AppendLine("");
            }

            List<ConvenioVO> listConvenioVOs = ModelBO.getConvenios(true);
            if (listConvenioVOs != null && listConvenioVOs.Count > 0)
            {
                temp.AppendLine("Convênios com vencimentos entre " + dtIni.ToShortDateString() + " e " + dtFim.ToShortDateString());
                temp.AppendLine("--------------------------------------------------------------");
                foreach (ConvenioVO convenioVO in listConvenioVOs)
                {
                    if (checkDia(convenioVO.diaPgto, dtIni, dtFim))
                    {
                        temp.AppendLine("\tConvênio: " + convenioVO.clienteVO.nome +
                            " ID: " + convenioVO.idConvenio.ToString() +
                            " Dia para pagamento: " + convenioVO.diaPgto.ToString());
                    }
                }
                temp.AppendLine("");
            }

            this.textBox1.Text = temp.ToString();
        }

        private bool checkDia(int dia, DateTime dtIni, DateTime dtFim)
        {
            bool retVal = false;
            DateTime dtRef = new DateTime(dtIni.Ticks);
            
            while (dtRef<=dtFim)
            {
                if (dtRef.Day == dia)
                {
                    retVal = true;
                    break;
                }
                dtRef = dtRef.AddDays(1);
            }
            return retVal;
        }
    }
}
